/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._1232;

/**
 * 在一个 XY 坐标系中有一些点，我们用数组 coordinates 来分别记录它们的坐标，其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。
 * <p>
 * 请你来判断，这些点是否在该坐标系中属于同一条直线上，是则返回 true，否则请返回 false。
 * <p>
 * 输入：coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
 * 输出：true
 * <p>
 * 输入：coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
 * 输出：false
 * <p>
 * 提示：
 * <p>
 * 2 <= coordinates.length <= 1000
 * coordinates[i].length == 2
 * -10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
 * coordinates 中不含重复的点
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._1232
 * @ClassName: CheckIf
 * @Author: linyaonan
 * @Date: 2020/1/10 18:23
 */
public class CheckIf {

    public boolean checkStraightLine(int[][] coordinates) {
        if (coordinates.length == 2) {
            return true;
        }
        int h = coordinates[1][1] - coordinates[0][1];
        int w = coordinates[1][0] - coordinates[0][0];
        boolean isPing = false;
        double k = 0.0D;
        if (0 == w) {
            isPing = true;
        } else {
            k = (double) h / w;
        }
        for (int i = 2; i < coordinates.length; i++) {
            int h1 = coordinates[i][1] - coordinates[i - 1][1];
            int w1 = coordinates[i][0] - coordinates[i - 1][0];
            if (isPing) {
                if (0 != w1) {
                    return false;
                }
            } else {
                // 除0判断
                if (w1 == 0) {
                    return false;
                }
                double getk = (double) h1 / w1;
                if (getk != k) {
                    return false;
                }
            }

        }
        return true;
    }
}
